package com.cdtu.ui.io;

import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;

/**
 * @author Mika
 * @date 2023/08/20 15:48
 * MyPrintStream 类：重定向输出到 Swing 组件
 **/
public class MyPrintStream extends PrintStream {

    private JTextComponent text;
    private StringBuffer sb = new StringBuffer();
    public MyPrintStream(OutputStream out, JTextComponent text) {
        super(out);
        this.text = text;
    }

    /**
     * 在这里重截,所有的打印方法都要调用的方法
     * TODO:
     *   1.banner 显示有问题（✔）
     *   2.编码问题：GBK 与 UTF8 互转（✔）
     */
    public void write(byte[] buf, int off, int len) {
        final String message = new String(buf, off, len);
        SwingUtilities.invokeLater(() -> {
                sb.append(message);
                text.setText(sb.toString());
        });
    }
}
